home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 20 / Cream of the Crop 20 (Terry Blount) (1996).iso / os2 / cppdoc.zip / cppdoc.cmd next >
OS/2 REXX Batch file  |  1996-06-06  |  35KB  |  869 lines

  1. /* --------------------------------------------------------------------------
  2.  * $RCSfile: cppdoc.cmd,v $
  3.  * $Revision: 1.0 $
  4.  * $Date: 1996/06/06 14:25:36 $
  5.  * $Author: Bablok $
  6.  * --------------------------------------------------------------------------
  7.  * Synopsis:
  8.  *
  9.  * Documentation-Generator for C++ programs.
  10.  *
  11.  * cppdoc.cmd and cppdoc.htm are Copyright (c) 1996 by Bernhard Bablok
  12.  * --------------------------------------------------------------------------
  13.  * History:
  14.  *
  15.  * $Log: cppdoc.cmd,v $
  16.  * Revision 1.0  1996/06/06 14:25:36  Bablok
  17.  * Initial revision
  18.  *
  19.  *
  20.  * -------------------------------------------------------------------------- */
  21.  
  22. PARSE ARG fileName indexFile
  23.  
  24. CALL prolog
  25. CALL readFiles
  26. CALL findClasses
  27. CALL findMember
  28. CALL printDoc
  29. CALL updateIndexFile
  30. RETURN 0
  31.  
  32. /* -------------------------------------------------------------------------- */
  33. /* some utility functions, for performance reasons at the head of the file    */
  34. /* -------------------------------------------------------------------------- */
  35.  
  36. /* -------------------------------------------------------------------------- */
  37. /* nextIdentifier: return position of next identifier and identifier          */
  38. /*                 of a given string                                          */
  39. /* -------------------------------------------------------------------------- */
  40. nextIdentifier: PROCEDURE
  41.  
  42. PARSE ARG string, start
  43.  
  44. IF string = '' THEN
  45.   RETURN 0 ''
  46. IF start = '' THEN
  47.   start = 1
  48. IF start > LENGTH(string) THEN
  49.   RETURN 0 ''
  50.  
  51. string = SUBSTR(string,start)
  52. first = VERIFY(string,'_abcdefghijklmnopqrstuvwxyz' ||,
  53.                                      'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789','M')
  54. IF first = 0 THEN
  55.   RETURN 0 ''
  56.  
  57. string = SUBSTR(string,first)
  58. len = VERIFY(string,'_abcdefghijklmnopqrstuvwxyz' ||,
  59.                                      'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') - 1
  60. IF len = -1 THEN
  61.   len = LENGTH(string)
  62. ident = SUBSTR(string,1,len)
  63. IF ident = 'operator' & POS('(',string,len+1) > 2 THEN
  64.   ident = SPACE(SUBSTR(string,1,POS('(',string,len+1)-1),0)
  65.  
  66. RETURN start+first-1 ident
  67.  
  68. /* -------------------------------------------------------------------------- */
  69. /* lastIdentifier: return last (c++)-identifier in a given string             */
  70. /*                  (including ~ for destructor, expecting no bitwise NOT)    */
  71. /* -------------------------------------------------------------------------- */
  72. lastIdentifier: PROCEDURE
  73.  
  74. PARSE ARG string, start
  75.  
  76. IF string = '' THEN
  77.   RETURN ''
  78. IF start = '' THEN
  79.   start = LENGTH(string)
  80.  
  81. revString = REVERSE(STRIP(SUBSTR(string,1,start)))
  82. first = VERIFY(revString,'~_abcdefghijklmnopqrstuvwxyz' ||,
  83.                                      'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789','M')
  84. IF first = 0 THEN
  85.   RETURN ''
  86. len = VERIFY(SUBSTR(revString,first),'~_abcdefghijklmnopqrstuvwxyz' ||,
  87.                                      'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') - 1
  88. IF len = -1 THEN
  89.   len = LENGTH(revString) - (first-1)
  90. ident = REVERSE(SUBSTR(revString,first,len))
  91. IF ident = 'operator' THEN DO
  92.   ident = STRIP(REVERSE(STRIP(SUBSTR(revString,1,len+first-1),'L','(')))
  93. END                                          /* IF ident = 'operator' THEN DO */
  94. RETURN ident
  95.  
  96. /* -------------------------------------------------------------------------- */
  97. /* findMatchingChar: find position of closing parenthesis, brace etc          */
  98. /* -------------------------------------------------------------------------- */
  99. findMatchingChar: PROCEDURE
  100.  
  101. PARSE ARG string, start
  102.  
  103. cOpen = SUBSTR(string,start,1)
  104. SELECT
  105.   WHEN cOpen = '(' THEN cClose = ')'
  106.   WHEN cOpen = '{' THEN cClose = '}'
  107.   WHEN cOpen = '[' THEN cClose = ']'
  108.   WHEN cOpen = '<' THEN cClose = '>'
  109.   WHEN cOpen = ')' THEN cClose = '('
  110.   WHEN cOpen = '}' THEN cClose = '{'
  111.   WHEN cOpen = ']' THEN cClose = '['
  112.   WHEN cOpen = '>' THEN cClose = '<'
  113.   OTHERWISE
  114.     RETURN 0
  115. END                                                                 /* SELECT */
  116. IF POS(cOpen,')}]>') > 0 THEN DO
  117.   string = REVERSE(string)
  118.   start  = LENGTH(string) - start + 1
  119. END                                       /* IF POS(cOpen,')}]>') > 0 THEN DO */
  120.  
  121. open = 1
  122. next = 0
  123. DO FOREVER
  124.   charPos = VERIFY(SUBSTR(string,start+next+1),cOpen||cClose,'M')
  125.   IF charPos = 0 THEN                           /* actually, this is an error */
  126.     RETURN 0
  127.   next = next + charPos
  128.   char = SUBSTR(string,start+next,1)
  129.   IF char = cOpen THEN
  130.     open = open + 1
  131.   ELSE
  132.     open = open - 1
  133.   IF open = 0 THEN DO
  134.     matchingPos = start + next
  135.     IF POS(cOpen,')}]>') > 0 THEN
  136.       matchingPos = LENGTH(string) - matchingPos + 1
  137.     RETURN matchingPos
  138.   END                                                  /* IF open = 0 THEN DO */
  139. END                                                             /* DO FOREVER */
  140.  
  141. /* -------------------------------------------------------------------------- */
  142. /* makeExternalRef: add anchor tag for external reference                     */
  143. /* -------------------------------------------------------------------------- */
  144. makeExternalRef: PROCEDURE EXPOSE externalRefs. className
  145.  
  146. PARSE ARG line
  147.  
  148. start = 1
  149. CALL nextIdentifier line, start
  150. PARSE VALUE RESULT WITH identPos ident
  151. DO WHILE ident <> ''
  152.   IF externalRefs.ident <> '' & ident <> className THEN DO
  153.     ref  = '<A HREF="'externalRefs.ident'">'ident'</A>'
  154.     head = SUBSTR(line,1,identPos-1)
  155.     tail = SUBSTR(line,identPos+LENGTH(ident))
  156.     line = head || ref || tail
  157.     identPos = identPos + LENGTH(externalRefs.ident) + 15
  158.   END             /* IF externalRefs.ident <> '' & ident <> className THEN DO */
  159.   start = identPos + LENGTH(ident)
  160.   CALL nextIdentifier line, start
  161.   PARSE VALUE RESULT WITH identPos ident
  162. END                                                   /* DO WHILE ident <> '' */
  163. RETURN line
  164.  
  165. /* -------------------------------------------------------------------------- */
  166. /* makeInternalRef: add anchor tag for internal reference                     */
  167. /* -------------------------------------------------------------------------- */
  168. makeInternalRef: PROCEDURE
  169.  
  170. PARSE ARG string, refToken, refAnchor
  171.  
  172. ref = '<A HREF="#'refAnchor'">'refToken'</A>'
  173. PARSE VALUE string WITH head (refToken) tail
  174. RETURN head || ref || tail
  175.  
  176. /* -------------------------------------------------------------------------- */
  177. /* lastWord: return last word of given string                                 */
  178. /* -------------------------------------------------------------------------- */
  179. lastWord: PROCEDURE
  180.  
  181. PARSE ARG string
  182. RETURN WORD(string,WORDS(string))
  183.  
  184. /* -------------------------------------------------------------------------- */
  185. /* count: Return count of a given character in a given string                 */
  186. /* -------------------------------------------------------------------------- */
  187. count: PROCEDURE
  188.  
  189. PARSE ARG c, string
  190.  
  191. start = 1
  192. num   = 0
  193. DO FOREVER
  194.   col = POS(c,string,start)
  195.   IF col > 0 THEN DO
  196.     num   = num + 1
  197.     start = col + 1
  198.   END                                                   /* IF col > 0 THEN DO */
  199.   ELSE
  200.     RETURN num
  201. END                                                             /* DO FOREVER */
  202.  
  203. /* -------------------------------------------------------------------------- */
  204. /* changestr: Change multiple occurences of a given string                    */
  205. /* -------------------------------------------------------------------------- */
  206. changestr: PROCEDURE
  207.  
  208. PARSE ARG string, tableo, tablei, start, delim, once
  209.  
  210. IF start = '' THEN
  211.   start = 1
  212. IF delim = '' THEN
  213.   delim = ' '
  214. IF once = '' THEN
  215.   once = 0
  216.  
  217. DO FOREVER
  218.   IF tablei = '' THEN
  219.     LEAVE
  220.   PARSE VALUE tablei WITH oldToken (delim) tablei
  221.   PARSE VALUE tableo WITH newToken (delim) tableo
  222.   DO FOREVER
  223.     IF POS(oldToken,string,start) = 0 THEN
  224.       LEAVE
  225.     PARSE VALUE SUBSTR(string,start) WITH head (oldToken) rest
  226.     IF start > 1 THEN
  227.       string = SUBSTR(string,1,start-1) || head || newToken || rest
  228.     ELSE
  229.       string = head || newToken || rest
  230.     IF once THEN